import WxRequest from './request'
import { syncGetStorage, syncClearStorage } from './storage'
import { env } from './env'

// 实例化
const request = new WxRequest({
  baseURL: env.baseURL,
  timeout: 15000
})
// 配置请求拦截器
request.interceptors.request = (config) => {
  // 在发送请求之前判断本地是否存在token，有则在请求头上添加token字段
  const token = syncGetStorage('token')
  if (token) {
    config.header.token = token
  }
  return config
}

// 响应拦截器
request.interceptors.response = (response) => {
  const { isSuccess, data } = response
  // isSuccess: false 表示是网络超时或其他问题
  if (!isSuccess) {
    wx.toast({ title: '网络异常' })
    // 如果请求错误，将错误的结果返回出去
    return response
  }
  // 若服务器返回的code为208，token失效或没有，需要重新登录
  switch (data.code) {
    case 200:
      return data
    case 208:
      wx.modal({
        title: '鉴权失败',
        content: '请重新登录',
        showCancel: false,
        success: () => {
          // 先清掉本地缓存再跳登录
          syncClearStorage()
          wx.navigateTo({
            url: '/pages/login/login'
          })
        }
      })
      return
    case 404:
      wx.toast({ title: '请求地址错误' })
      return
    case 500:
      wx.toast({ title: '服务器异常' })
      return
    default:
      wx.toast({ title: '程序异常，请联系客服或稍等重试' })
      return Promise.reject(response)
  }
}
export default request
